
import { OmitDto, Rule, RuleType } from "@midwayjs/validate";

export class BaseStudentDto {
  @Rule(RuleType.number().min(0))
  studentId: number;

  @Rule(RuleType.number().optional().allow(null).allow('').min(0))
  userId?: number;

  @Rule(RuleType.string().optional().allow(null).allow('').max(500))
  stuId?: string;

  @Rule(RuleType.string().optional().allow(null).allow('').max(500))
  email?: string;

  @Rule(RuleType.string().optional().allow(null).allow('').max(500))
  summary?: string;

  @Rule(RuleType.number().optional().allow(null, "").min(0))
  // 改为 number，保持与实体类型一致
  // 允许 null 和空字符串，便于表单传参兼容
  // 注意：若前端传空字符串，需在服务端转换或忽略
  gradeId?: number;

  @Rule(RuleType.number().optional().allow(null, "").min(0))
  majorId?: number;

  @Rule(RuleType.string().optional().allow(null).allow('').max(500))
  createBy?: string;

  @Rule(RuleType.string().optional().allow(null).allow('').max(500))
  createTime?: string;

  @Rule(RuleType.string().optional().allow(null).allow('').max(500))
  updateBy?: string;

  @Rule(RuleType.string().optional().allow(null).allow('').max(500))
  updateTime?: string;

  @Rule(RuleType.string().optional().allow(null).allow('').max(500))
  remark?: string;

  @Rule(RuleType.string().optional().allow(null).allow('').max(500))
  status?: string;

  @Rule(RuleType.string().optional().allow(null).allow('').max(500))
  delFlag?: string;

}
export class CreateStudentDto extends OmitDto(BaseStudentDto, ['studentId']) {

}
export class UpdateStudentDto extends BaseStudentDto {
  @Rule(RuleType.string().optional().allow(null).allow(''))
  userName?: string;

  @Rule(RuleType.string().optional().allow(null).allow(''))
  nickName?: string;

  @Rule(RuleType.number().optional().allow(null, ""))
  deptId?: number;

  @Rule(RuleType.string().email().optional().allow(null, ""))
  userEmail?: string;

  @Rule(RuleType.string().length(11).optional().allow(null, ""))
  phonenumber?: string;

  @Rule(RuleType.string().optional().allow(null, ""))
  sex?: string;

  @Rule(RuleType.string().optional().allow(null).allow(''))
  userStatus?: string;

  @Rule(RuleType.array().items(RuleType.number().min(0)).optional())
  roleIds?: Array<number>;

  // 兼容前端可能传入的别名字段（grade/major）
  @Rule(RuleType.number().optional().allow(null, "").min(0))
  grade?: number;

  @Rule(RuleType.number().optional().allow(null, "").min(0))
  major?: number;
}
export class QueryStudentDto extends CreateStudentDto {
  @Rule(RuleType.number().optional().min(0))
  pageNum?: number;

  @Rule(RuleType.string().optional().allow(null).allow(''))
  nickName?: string;

  @Rule(RuleType.number().optional().min(0))
  pageSize?: number;
}
export class ListStudentDto extends BaseStudentDto { }

export class createStudentUserDto extends BaseStudentDto {
  @Rule(RuleType.string())
  userName: string;

  @Rule(RuleType.string().required())
  nickName: string;


  @Rule(RuleType.number().allow(null, ""))
  deptId?: number;

  @Rule(RuleType.string().email().allow(null, ""))
  email?: string;

  @Rule(RuleType.string().length(11).allow(null, ""))
  phonenumber?: string;

  @Rule(RuleType.string().optional().allow(null).allow(''))
  status: string;

  @Rule(RuleType.string().allow(null, ""))
  sex?: string;

  @Rule(RuleType.string().max(500).allow(null, ""))
  remark?: string;

  @Rule(RuleType.array())
  roleIds?: Array<number>


}
